﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;//引用MySQL命名空间
using System.Windows.Forms;  //引用Forms命名空间
using System.Data;     //引用数据库命名空间
using System.IO; //引用文件操作命名空间 2018-11-5 08:48:21


namespace public_dbOpt
{
    // 这是一个自定义的静态类，用于定义全局事件  
    public static class GlobalEvents
    {
        // 定义一个静态事件，用于当孙子窗体有消息要发送给祖父窗体时触发  
        public static event Action<string> MessageReceivedByGrandparent;

        // 一个静态方法，用于触发上面定义的事件  
        public static void TriggerMessageReceivedByGrandparent(string message)  
        {
            // 检查是否有任何对象订阅了MessageReceivedByGrandparent事件  
            if (MessageReceivedByGrandparent != null)
            {
                // 调用所有订阅了MessageReceivedByGrandparent事件的委托  
                MessageReceivedByGrandparent(message);
            }
        }
    }

    class dbOPT
    {
 
        MySqlConnection conn = MyConnection();//得到数据库连接对象
        public static MySqlConnection MyConnection()
        {
            
            try 
            {
                //将db.txt文件放在程序运行的同一目录中，如 项目名\bin\Debug 下, 连接数据库字符串参见文档《【数据库】C#与数据库连接.docx》
                FileStream aFile = new FileStream("db.txt", FileMode.Open); 
                StreamReader sr = new StreamReader(aFile);
                string strLine = sr.ReadLine();      //读取db.txt的内容，获取连接数据库字符串
                sr.Close();
                aFile.Close();
                return new MySqlConnection(strLine);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                return null;
            }          
        }        

        /// <summary>
        /// 操作数据库，执行各种SQL语句
        /// </summary>
        /// <param name="strSql">SQL语句</param>
        /// <returns>方法返回受影响的行数</returns>
        public int OperateData(string strSql)
        {
            try
            {
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();//打开数据库连接
                }  
                MySqlCommand cmd = new MySqlCommand(strSql, conn);//创建命令对象
                int i = (int)cmd.ExecuteNonQuery();//执行SQL命令
                conn.Close();//关闭数据库连接
                return i;//返回数值
            }
            catch(Exception e)  
            {
                MessageBox.Show(e.Message);
                return -1;
            }
        }


        /// <summary>
        /// 方法用于绑定DataGridView控件
        /// </summary>
        /// <param name="dgv">DataGridView控件</param>
        /// <param name="sql">SQL语句</param>
        public DataSet BindDataGridView(DataGridView dgv, string sql)
        {
            try
            {
                MySqlDataAdapter sda = new MySqlDataAdapter(sql, conn);//创建数据适配器对象
                DataSet ds = new DataSet();//创建数据集对象
                sda.Fill(ds);//填充数据集
                dgv.DataSource = ds.Tables[0];//绑定到数据表
                ds.Dispose();//释放资源
                return ds;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                return null;
            }
        }


        /// <summary>
        /// 使用此方法可以得到数据集
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <returns>方法返回数据集</returns>
        public DataSet GetTable(string sql)
        {
            try
            {
                MySqlDataAdapter sda = new MySqlDataAdapter(sql, conn);//创建数据适配器对象
                DataSet ds = new DataSet();//创建数据集
                sda.Fill(ds);//填充数据集
                ds.Dispose();//释放资源
                return ds;//返回数据集
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                return null;
            }
        }

        /// <summary>
        /// //绑定下拉列表
        /// </summary>
        /// <param name="strTable">数据库表名</param>
        /// <param name="cb">ComboBox对象</param>
        /// <param name="i">指定数据列索引</param>
        public void BindDropdownlist(string strTable, ComboBox cb, int i)
        {
            try
            {
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();//打开数据库连接
                }

                MySqlCommand cmd = new MySqlCommand(//创建命令对象
                    "select * from " + strTable, conn);
                MySqlDataReader sdr = cmd.ExecuteReader();//得到数据读取器
                while (sdr.Read())
                {
                    cb.Items.Add(sdr[i].ToString());//添加信息
                }
                conn.Close();//关闭数据库连接
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }

        }
        /// <summary>
        /// //绑定下拉列表
        /// </summary>
        /// <param name="strTable">数据库表名</param>
        /// <param name="cb">ComboBox对象</param>
        /// <param name="i">指定数据列索引</param>
        public void BindDropdownlist_sql(string sql, ComboBox cb, int i)
        {
            try
            {
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();//打开数据库连接
                }

                MySqlCommand cmd = new MySqlCommand(//创建命令对象
                    sql, conn);
                MySqlDataReader sdr = cmd.ExecuteReader();//得到数据读取器
                while (sdr.Read())
                {
                    cb.Items.Add(sdr[i].ToString());//添加信息
                }
                conn.Close();//关闭数据库连接
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }

        }
    }
}
